#include "common.h"
#include "mblur.h"
struct v2p {
float4 tc0:TEXCOORD0;
float4 tc1:TEXCOORD1;
float4 tc2:TEXCOORD2;
float4 tc3:TEXCOORD3;
float4 tc4:TEXCOORD4;
float4 tc5:TEXCOORD5;
float4 tc6:TEXCOORD6;
};
uniform sampler2D s_distort;
uniform half4 e_barrier;
uniform half4 e_weights;
uniform half4 e_kernel;
half4 main(v2p I):COLOR {
half3 nc=tex2D(s_normal,I.tc0);
half4 nd;
nd.x=dot(nc,(half3)tex2D(s_normal,I.tc1));
nd.y=dot(nc,(half3)tex2D(s_normal,I.tc2));
nd.z=dot(nc,(half3)tex2D(s_normal,I.tc3));
nd.w=dot(nc,(half3)tex2D(s_normal,I.tc4));
nd-=e_barrier.x;
nd=step (0,nd);
half ne=saturate(dot(nd,e_weights.x));
float4 tc5r=I.tc5.wzyx;
float4 tc6r=I.tc6.wzyx;
Depth filter:compute gradiental difference:(c-sample1)+(c-sample1_opposite)
half4 dc=tex2D (s_position, I.tc0);
half4 dd;
dd.x=(half)tex2D(s_position,I.tc1).z+(half)tex2D(s_position,I.tc2).z;
dd.y=(half)tex2D(s_position,I.tc3).z+(half)tex2D(s_position,I.tc4).z;
dd.z=(half)tex2D(s_position,I.tc5).z+(half)tex2D(s_position,tc5r).z;
dd.w=(half)tex2D(s_position,I.tc6).z+(half)tex2D(s_position,tc6r).z;
dd=abs(2*dc.z-dd)-e_barrier.y;
dd=step(dd,0);
half de=saturate (dot(dd,e_weights.y));
half w=(1-de*ne)*e_kernel.x;
#ifdef USE_DISTORT
half4 distort=tex2D(s_distort, I.tc0);
half2 doffs=(distort.xy-.5h)*def_distort;
float2 center=I.tc0+doffs;
#else
float2 center=I.tc0;
#endif
float2 offset=center*(1-w);
half4 s0=tex2D(s_image,offset+I.tc1*w);
half4 s1=tex2D(s_image,offset+I.tc2*w);
half4 s2=tex2D(s_image,offset+I.tc3*w);
half4 s3=tex2D(s_image,offset+I.tc4*w);
half3 final=mblur(center,dc,(s0+s1+s2+s3)/4.h);
half3 bloom=tex2D(s_bloom,I.tc0);
return combine_bloom(final,bloom);
}